﻿#ifndef SNAKE_H_
#define SNAKE_H_

//------------------------------------------------------------------------
//
//  [11/18/2012 KimSiHoon]
//
//  Name:   Snake.h
//
//  Desc:   Snake 정의 
//
//  Author: 김시훈 (bongnam_go@naver.com) 
//
//  [11/22/2012 KimSiHoon]
//	충돌판정을 내부에서 하도록 변경
//  뱀의 상태를 추가
//------------------------------------------------------------------------

#include "Define.h"
#include <list>
#include <iostream>

class Snake
{

public :

	//뱀의 진행 방향
	typedef enum{ LEFT=75, RIGHT=77 ,UP=72, DOWN=80 } DIRECTION;

public:

	Snake() : direction_(RIGHT),current_position_(7,5),grow_goal_(0),eat_num_counter_(0)
	{
		this->InitSnake();
	}

	~Snake()
	{
	}

	//뱀을 초기화
	void InitSnake();
	void Update();
	void Render();
	void Input(char key);

	//충돌체크
	void IsCollide();

	//뱀의 몸이 자라고 있는지 체크
	bool IsGrowing();

	bool IsActive() const { return active_; }

	DIRECTION GetDirection() const { return direction_; }
	Position GetPosition() const { return current_position_; }
	int GetLength() const { return length_; }
	int GetEatItemCounter() const { return eat_num_counter_; }

	void SetDirection(DIRECTION direction) { direction_ = direction; }

private:

	//뱀의 움직임을 기억할 좌표 리스트
	std::list<Position> typedef SNAKE_TRACE;

private:

	//뱀의 좌표 리스트
	SNAKE_TRACE snake_trace_;

	//현재 뱀의 방향
	DIRECTION direction_;

	//현재 머리의 위치
	Position current_position_;

	//몸의 길이
	int length_;

	//뱀의 상태
	bool active_;

	//자라야할 몸의 길이 목표치
	int grow_goal_;

	//먹은 아이템 카운터
	int eat_num_counter_;

};
#endif